﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Entidades.Seguridad;
using System.Web.Mvc;
using Entidades.Sistema.Distribucion;
using Modelo.Sistema.Distribucion;
using Entidades.Sistema.Base;
using Entidades.Sistema.Venta;
using Modelo.Sistema.Venta;
using Modelo.Sistema.Base;
using Entidades.Sistema.Distribucion.CoR;


namespace VistaOnlineR1._1.Controllers.Sistema.Distribucion
{
    public class VehiculoController : BaseController
    {
         #region campos
        CatalogoVehiculo _catalogoVehiculo;
        CatalogoEmpleado _catalogoEmpleado;
        #endregion

         #region Constructors
        public VehiculoController()
            : this(new CatalogoVehiculo(), new CatalogoEmpleado())
        {
        }

        public VehiculoController(CatalogoVehiculo catalogoVehiculo, CatalogoEmpleado catalogoEmpleado)
        {
            _catalogoVehiculo = catalogoVehiculo;
            _catalogoEmpleado = catalogoEmpleado;
        }
        #endregion

        public ActionResult Index()
        {
            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            List<EnumTipoServicioDespacho> list = Enum.GetValues(typeof(EnumTipoServicioDespacho)).Cast<EnumTipoServicioDespacho>().ToList();
            ViewBag.TipoServicioDespacho = list;
            ViewBag.Empleado = _catalogoEmpleado.Listarempleados();

            return View(_catalogoVehiculo.ListarVehiculo());
        }
        [ValidateInput(false)]
        public ActionResult EditVehiculoPartial()
        {
            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            List<EnumTipoServicioDespacho> list = Enum.GetValues(typeof(EnumTipoServicioDespacho)).Cast<EnumTipoServicioDespacho>().ToList();
            ViewBag.TipoServicioDespacho = list;
            ViewBag.Empleado = _catalogoEmpleado.Listarempleados();

            return PartialView("EditVehiculoPartial", _catalogoVehiculo.ListarVehiculo());
        }

        [HttpPost, ValidateInput(false)]
        public ActionResult EditVehiculoAddNewPartial(Vehiculo Vehiculo)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    _catalogoVehiculo.AgregarVehiculo(Vehiculo);
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            else
                ViewData["EditError"] = "Por Favor, modifica los errores.";

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            return PartialView("EditVehiculoPartial", _catalogoVehiculo.ListarVehiculo());
        }
        [HttpPost, ValidateInput(false)]
        public ActionResult EditVehiculoUpdatePartial(Vehiculo Vehiculo)
        {

            ModelState.Clear();

            if (ModelState.IsValid)
            {
                try
                {
                    //Llega el id en nombre
                    _catalogoVehiculo.ModificarVehiculo(Vehiculo);
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            else
                ViewData["EditError"] = "Por Favor, modifica los errores.";

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            return PartialView("EditVehiculoPartial", _catalogoVehiculo.ListarVehiculo());
        }
        [HttpPost, ValidateInput(false)]
        public ActionResult EditVehiculoDeletePartial(int IdVehiculo)
        {
            if (IdVehiculo >= 0)
            {
                try
                {
                    _catalogoVehiculo.EliminarVehiculo(_catalogoVehiculo.BuscarVehiculo(IdVehiculo));
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            return PartialView("EditVehiculoPartial", _catalogoVehiculo.ListarVehiculo());
        }


    }
}
